<?php
class Download{
	private static $contentType = [
		'zip' => 'application/zip',
		'xlxs' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
	];
	public function toXlxs($file){
		$filename = basename($file);
		header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="'.$filename.'"');
        header('Cache-Control: max-age=0');

        // If you're serving to IE 9, then the following may be needed
        header('Cache-Control: max-age=1');

        // If you're serving to IE over SSL, then the following may be needed
        header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
        header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header ('Pragma: public'); // HTTP/1.0        
        // 打开文件以二进制读取模式
        $fp = fopen($file, 'rb');
        // 检查文件是否成功打开
        if ($fp === false) {
            die('无法打开文件');
        }
        // 循环读取文件内容并输出到浏览器
        while (!feof($fp)) {
            echo fread($fp, 1024); // 每次读取1024字节，可以根据需要调整块大小
            flush(); // 强制将输出缓冲区的内容发送到浏览器（对于大文件很有用）
        }
        // 关闭文件指针
        fclose($fp);
        // 脚本执行完毕
        exit;
	}
	public function toZip($file){
        // 获取文件信息
        $filename = basename($file);
        // 注意：filesize() 在这里不是必需的，但如果你想要设置 Content-Length 头，可以使用它
        $filesize = filesize($file);

        // 设置一个默认的 MIME 类型，或者根据文件扩展名动态设置
        $filetype = 'application/zip'; // 对于 ZIP 文件
        // 或者使用更复杂的逻辑来确定 MIME 类型，例如通过文件扩展名

        // 设置HTTP头信息
        header('Content-Description: File Transfer');
        header('Content-Type: ' . $filetype);
        header('Content-Disposition: attachment; filename="' . $filename . '"');
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        // 如果你知道文件大小，可以取消注释下一行并设置正确的 $filesize
        header('Content-Length: ' . $filesize);

        // 打开文件以二进制读取模式
        $fp = fopen($file, 'rb');
        // 检查文件是否成功打开
        if ($fp === false) {
            die('无法打开文件');
        }
        // 循环读取文件内容并输出到浏览器
        while (!feof($fp)) {
            echo fread($fp, 1024); // 每次读取1024字节，可以根据需要调整块大小
            flush(); // 强制将输出缓冲区的内容发送到浏览器（对于大文件很有用）
        }
        // 关闭文件指针
        fclose($fp);
        // 脚本执行完毕
        exit;
    }

}